package com.foreveross.chameleon.user.plugin;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.pingplusplus.android.PaymentActivity;
import com.pingplusplus.android.PingppLog;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.util.Log;

public class PingPlugin extends CordovaPlugin{
	
	 /** JS回调接口对象 */
    public static CallbackContext cbCtx = null;
    private static Activity activity=null;
    private static PingPlugin THIS;
    /**
	 *开发者需要填一个服务端URL 该URL是用来请求支付需要的charge。务必确保，URL能返回json格式的charge对象。
	 *服务端生成charge 的方式可以参考ping++官方文档，地址 https://pingxx.com/guidance/server/import 
	 *
	 *【 http://218.244.151.190/demo/charge 】是 ping++ 为了方便开发者体验 sdk 而提供的一个临时 url 。
	 * 改 url 仅能调用【模拟支付控件】，开发者需要改为自己服务端的 url 。 
	 */
    
    private static final int REQUEST_CODE_PAYMENT = 1;
    
    
    /**
     * 插件主入口
     */
    @Override
    public boolean execute(String action, final JSONArray args, CallbackContext callbackContext) throws JSONException {
        
    	cbCtx=callbackContext;//ContextCallback 表示要在提供的上下文中运行的方法。在完成该方法的执行后，上下文还原为其以前的状态。
    	activity =this.cordova.getActivity();
    	THIS=this;

         if(action.equals("setDebugMode")){//测试模式
        	 
        	 boolean b=args.getBoolean(0);
        	 PingppLog.DEBUG = b;
        	 Log.d("setDebugMode",Boolean.toString(b));
        	 callbackContext.success();
        	 return true;
         }else if(action.equals("createPayment")||action.equals("createPaymentWithWeixinOrAlipay")){//str为传进来的账单，处理账单
        	 
        	// Log.d("args", args.getString(0));
        	 String str=args.getString(0);
        	 Log.d("createPayment createPaymentWithWeixinOrAlipay", str);
        	 paymentEx(str);
        	 return true;
        	 
         }
         return false;
     }
    

    
    public void paymentEx(String data){
    	if(null==data){
    		cbCtx.error("请求出错,请检查URL,URL无法获取charge");
    		return;
    	}
//    	Log.d("charge", data);
    	try{
    		Intent intent = new Intent();
          String packageName = activity.getPackageName();
//          Log.d("packageName:", packageName);
          ComponentName componentName = new ComponentName(packageName, packageName + ".wxapi.WXPayEntryActivity");
          intent.setComponent(componentName);
          intent.putExtra(PaymentActivity.EXTRA_CHARGE, data);
          cordova.startActivityForResult(THIS,intent, REQUEST_CODE_PAYMENT);
          
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    }
    /**
	 * onActivityResult 获得支付结果，如果支付成功，服务器会收到ping++ 服务器发送的异步通知。
	 * 最终支付成功根据异步通知为准
	 */
   @Override  
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

	   super.onActivityResult(requestCode, resultCode, data);
        //支付页面返回处理
        if (requestCode == REQUEST_CODE_PAYMENT) {
            if (resultCode == Activity.RESULT_OK) {
                String result = data.getExtras().getString("pay_result");
                /* 处理返回值
                 * "success" - payment succeed
                 * "fail"    - payment failed
                 * "cancel"  - user canceld
                 * "invalid" - payment plugin not installed
                 */
//                Log.d("onActivityResult", "2");
                String errorMsg = data.getExtras().getString("error_msg"); // 错误信息
                String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息
                String str = result;
            	if (null !=errorMsg && errorMsg.length() != 0) {
            		str += "\n" + errorMsg;
            	}
            	if (null !=extraMsg && extraMsg.length() != 0) {
            		str += "\n" + extraMsg;
            	}
            	cbCtx.success(str);               
            }
        }else{
        	cbCtx.error("error");
        }
        
    }

}
